package com.cwt_taxi_xa.protocol;

import android.content.Context;

import com.cwt_taxi_xa.util.AppLog;
import com.cwt_taxi_xa.util.ExceptionUtil;
import com.cwt_taxi_xa.util.Tools;

/**
 * @author wlh
 * 解码55AA协议
 */
public class DecoderSZ55aa {

	private static final String TAG = "DecoderSZ55aa";

	public static byte[] lastJJQData;
	public synchronized static void decoderData(String type, byte[] bytes, Context context){

		lastJJQData = bytes;

//		AppLog.e("DecoderSZ55aa-"+type+"接收到55aa数据包:"+Tools.parseByte2HexStr(bytes));
//		AppLog.saveTxt_s6("串口6-接收（已处理）:"+Tools.parseByte2HexStr(bytes));//--------------------------------------


		//聚利计价器拓展指令，不需要处理
		if(bytes.length>10){
			byte[] guolv = Tools.byteTobyte(bytes, 6, 2);
			if(Tools.parseByte2HexStr(guolv).equals("CC04")){
//			AppLog.e("DecoderSZ55aa忽略数据-聚利计价器拓展指令，不需要处理");
				return;
			}
		}


		//改在MeterBusinessProcess处理
//		//南京通用计价器，在30秒内取消的，会发空E8指令
//		if(Tools.parseByte2HexStr(Tools.byteTobyte(bytes, 0, 16)).contains("00E800000000")){
//			AppLog.e("运营取消");
//			if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, true);
//			AppLog.e("DecoderSZ55aa忽略数据-南京通用计价器，在30秒内取消的，会发空E8指令");
//			return;
//		}



//		if(SPConstants.log_test){
//			AppLog.saveTxt("55aa-接收:"+Tools.parseByte2HexStr(bytes));
//		}
//			AppLog.e("55aa-接收:"+Tools.parseByte2HexStr(bytes));

		try {
			// 逆转义
			bytes = Tools.trope55aa(bytes, Tools.DECODER_TYPE);

			int nOff = 0;
			nOff +=2;
			// 包长度
			int length = Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(bytes, nOff, 2)), 16);
			nOff +=2;

			//设备类型	计价器：0x02，智能顶灯：0x05，GPS智能服务终端：0x00
			String deviceType = Tools.parseByte2HexStr(Tools.byteTobyte(bytes, nOff, 1));
			nOff +=1;
			// 厂商标识
			String code = Tools.parseByte2HexStr(Tools.byteTobyte(bytes, nOff, 1));

			nOff +=1;
			//命令码
			String mid = Tools.parseByte2HexStr(Tools.byteTobyte(bytes, nOff, 2));

			nOff +=2;
			//处理数据内容
			int len = bytes.length - 11;
			byte[] dataContent = new byte[len];

			if(len!=0){
				dataContent =  Tools.byteTobyte(bytes, nOff, len);
			}

			//			//处理司机刷卡
			//			if(flag){
			//				processCardData(mid,dataContent);
			//			}else{
			if("05".equals(deviceType)){
				//智能顶灯
				AppLog.v("[Decoder55aa]智能顶灯"+"数据："+Tools.parseByte2HexStr(dataContent));
//				processToplight(mid,dataContent,context);
			}else if("02".equals(deviceType)){
				//计价器
				//AppLog.v("[Decoder55aa]计价器"+"数据："+Tools.parseByte2HexStr(dataContent));
				MeterDecoder.processMeter(mid,dataContent,context);
			}else if("06".equals(deviceType)){
				//服务评价器
				AppLog.v("[Decoder55aa]服务评价器"+"数据："+Tools.parseByte2HexStr(dataContent));
//				QyeDecoder.processLKQ(mid,dataContent,context);
			}else if("07".equals(deviceType)){
				AppLog.v("[Decoder55aa]解码55AA协议数据包"+"数据："+Tools.parseByte2HexStr(dataContent));
//				VideoDecoder.decoderData(mid, dataContent, context);
			}
			//			}
		}catch (Exception e) {
			AppLog.e(ExceptionUtil.getInfo(e));
			e.printStackTrace();
		}

	}



	/**
	 * 处理顶灯的数据接口
	 * @param mid 命令字
	 * @param dataContent 数据区
	 */
//	public static void processToplight(String mid,byte[] dataContent,Context context){
//		try {
//			AaData aaData = new AaData();
//			int cmd = Integer.parseInt(mid, 16);
//			aaData.setMid(cmd);
//			switch (cmd) {
//			case 0x0000:	//3.1	智能顶灯状态查询指令
//
//				try {
//					int num = 0;
//					//设备编号
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 5)));
//					num+=5;
//					//设备硬件版本号
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 1)));
//					num+=1;
//					//软件主版本号
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 1)));
//					num+=1;
//					//软件次版本号
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 1)));
//					num+=1;
//					//顶灯设备状态
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					num+=1;
//					//顶灯显示状态
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					num+=1;
//					//是否进入夜间模式
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					num+=1;
//					//RFU
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 5)));
//					num+=5;
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//10.4.3.2  智能顶灯复位指令应答
//			case 0x0001:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//			case 0x0003:	// 3.3	智能顶灯通讯波特率设置指令
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//10.4.3.4  智能顶灯固件升级指令应答
//			case 0x00FF:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//3.5	营运状态设置指令（必选）
//			case 0x0010:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//10.4.3.6  星级状态设置指令应答
//			case 0x0011:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//10.4.3.7  防伪密标显示指令应答
//			case 0x0013:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//10.4.3.8  取消防伪密标显示指令应答
//			case 0x0014:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//3.9	夜间工作模式设指令 （保留，不实现）
//			case 0x0012:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//10.4.3.10  夜间工作模式参数设置指令应答
//			case 0x0020:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//3.11	发送预置信息（后顶灯必选）
//			case 0x0100:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//3.12	发送临时信息（后顶灯必选）
//			case 0x0101:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//3.13	删除信息（后顶灯必选）
//			case 0x0102:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//3.15智能顶灯参数设置（后顶灯必选）
//			case 0x0103:
//				try {
//					int num = 0;
//					//操作结果
//					aaData.getDataList().add(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//				//3.16查询预置信息（后顶灯必选）
//			case 0x0104:
//				try {
//					int num = 0;
//					// 总条数	UINT8	固定为“1”，为了兼容旧版本程序
//					aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)),16));
//					num += 1;
//					// 编号	UINT8	1-20
//					aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)),16));
//					num += 1;
//					// 信息内容	STRING	解密后文本长度<=100字节，按照附录A规则加密
//					aaData.getDataList().add(Tools.byteToString(dataContent, num, dataContent.length-num));
//					//处理相关业务
//					BusinessProcess55aa.processToplight(aaData, context);
//				} catch (Exception e) {
//					AppLog.e(ExceptionUtil.getInfo(e));
//					e.printStackTrace();
//				}
//				break;
//
//			default:
//				break;
//			}
//		} catch (Exception e) {
//			AppLog.e(ExceptionUtil.getInfo(e));
//			e.printStackTrace();
//		}
//	}
}
